package com.data.service;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.config.dao.ChargeConfigDao;
import com.config.dao.EquipmentDao;
import com.config.dao.LineConfigDao;
import com.config.entity.ChargeConfig;
import com.config.entity.Equipment;
import com.config.entity.LineConfig;
import com.data.dao.ChargeDayDao;
import com.data.dao.ChargeMonthDao;
import com.data.entity.ChargeDay;
import com.data.entity.ChargeMonth;

@Service("chargeMonthService")
public class ChargeMonthServiceImpl  implements ChargeMonthService{
	@Resource(name="lineConfigDao")
	private LineConfigDao lineConfigDao;
	@Resource(name="equipmentDao")
	private EquipmentDao equipmentDao;
	@Resource(name="chargeMonthDao")
	private ChargeMonthDao chargeMonthDao;
	@Resource(name="chargeDayDao")
	private ChargeDayDao chargeDayDao;
	@Resource(name="chargeConfigDao")
	private ChargeConfigDao chargeConfigDao;
	/**
	 * 根据日期转存电费月记录数据
	 * @param belongDate
	 */
	@Override
	public void saveChargeMonth(Date belongDate) {
			List<LineConfig> lines=lineConfigDao.findAllLine();
			if(lines.size()!=0){
				for(LineConfig line:lines){
				//	this.saveLineChargeMonth(line.getId(), belongDate);  生产线不提取数据
					List<Equipment> equs=equipmentDao.listByLine(line.getId());
					if(equs.size()!=0){
						for(Equipment e:equs){
							this.saveEquChargeMonth(e.getId(), belongDate);
						}
					}
				}
			}
     }
	/**
	 * 提取生产线每月电费数据
	 * @param lineId
	 * @param belongDate
	 */
//	private void saveLineChargeMonth(int lineId,Date belongDate){
//		SimpleDateFormat sdft = new SimpleDateFormat("yyyy-MM-dd");
//		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
//		List<ChargeConfig>configs=chargeConfigDao.findDistinctChargesName();
//		if(configs.size()!=0){
//			for(ChargeConfig config:configs){
//				//查询是否已经存在电费月记录数据，存在更新，不存在保存
//				ChargeMonth month=chargeMonthDao.getChargeMonth(lineId, sdf.format(belongDate),config.getChargeName(),"Y");
//				boolean isNew=false;
//				if(month==null){
//					month=new ChargeMonth();
//                    month.setLineId(lineId);
//					month.setBelongDate(sdf.format(belongDate));
//					month.setChargeName(config.getChargeName());
//					isNew=true;	
//				} 
//				Calendar  cal=Calendar.getInstance();
//				cal.setTime(belongDate);
//				String startDate=sdf.format(cal.getTime())+"-"+"01";//每月从1号开始计算
//				String endDate=sdft.format(belongDate);
//				//从开始日期到结束日期的每天电费记录
//				List<ChargeDay> days=chargeDayDao.getChargeDaysByDate(lineId, startDate, endDate,config.getChargeName(),"Y");
//				double relativeComp=0.0;double charges=0.0;
//				if(days.size()!=0){
//					for(ChargeDay day:days){
//						relativeComp+=day.getRelativeComp();
//						charges+=day.getCharge();
//					 }
//				   }
//				month.setRelativeComp(relativeComp);
//				month.setCharge(charges);
//				if(isNew){
//					chargeMonthDao.save(month);
//				}else{
//					chargeMonthDao.update(month);
//				}
//			}
//		}	
//	}
	
	/**
	 * 提取生产线每月电费数据
	 * @param lineId
	 * @param belongDate
	 */
	private void saveEquChargeMonth(int equId,Date belongDate){
		SimpleDateFormat sdft = new SimpleDateFormat("yyyy-MM-dd");
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
		List<ChargeConfig>configs=chargeConfigDao.findDistinctChargesName();
		if(configs.size()!=0){
			for(ChargeConfig config:configs){
				//查询是否已经存在电费月记录数据，存在更新，不存在保存
				ChargeMonth month=chargeMonthDao.getChargeMonth(equId, sdf.format(belongDate),config.getChargeName(),"N");
				boolean isNew=false;
				if(month==null){
					month=new ChargeMonth();
                    month.setEquId(equId);
					month.setBelongDate(sdf.format(belongDate));
					month.setChargeName(config.getChargeName());
					isNew=true;	
				} 
				Calendar  cal=Calendar.getInstance();
				cal.setTime(belongDate);
				String startDate=sdf.format(cal.getTime())+"-"+"01";//每月从1号开始计算
				String endDate=sdft.format(belongDate);
				//从开始日期到结束日期的每天电费记录
				List<ChargeDay> days=chargeDayDao.getChargeDaysByDate(equId, startDate, endDate,config.getChargeName(),"N");
				double relativeComp=0.0;double charges=0.0;
				if(days.size()!=0){
					for(ChargeDay day:days){
						relativeComp+=day.getRelativeComp();
						charges+=day.getCharge();
					 }
				   }
				month.setRelativeComp(relativeComp);
				month.setCharge(charges);
				if(isNew){
					chargeMonthDao.save(month);
				}else{
					chargeMonthDao.update(month);
				}
			}
		}	
	}
}
